home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Purity / Purity #22 (1994-01-19)(Diesel)(DE)[WB].zip / Purity #22 (1994-01-19)(Diesel)(DE)[WB].adf / PPPClone / PPDemo.p < prev    next >
Text File  |  1994-01-17  |  4KB  |  140 lines

  1. PROGRAM PPdemo;
  2.  
  3. {
  4.  **************************************
  5.  ***   powerpacker.library - Demo   ***
  6.  **************************************
  7.  ***  Autor   : Marc Pahlenkämper   ***
  8.  ***  Datum   : 15.7.92             ***
  9.  ***  Sprache : Kickpascal V2.10    ***
  10.  ***  Rechte  : Maxon Computer GmbH ***
  11.  ***            Redaktion Kickstart ***
  12.  **************************************
  13. }
  14.  
  15. USES Exec;
  16. {$incl "pp.lib",'dos.lib'}
  17.  
  18.  {--------- globale Variablen ---------}
  19.  
  20.  VAR len,FileLen,Err : long;
  21.      ok,CrLen       : long;
  22.      start,FileStart   : ptr;
  23.      CrInfo      : ptr;
  24.      FHandle     : BPTR;
  25.      FName       : String;
  26.  
  27. BEGIN
  28.    IF FromWB THEN BEGIN
  29.       Assign(input,'Con:20/10/600/180/PPDemo');
  30.       Reset(input);
  31.       Output:=Input;
  32.    END;
  33.    {-----------------------------------}
  34.    {-      Öffnen der Library         -}
  35.    OpenLib(PPBase,PPNAME,PPVERSION);
  36.    Writeln("Demo zur Benutzung der powerpacker.library");
  37.  
  38.    {-----------------------------------}
  39.    {- Eingabe und  Öffnen des Files   -}
  40.    Write("Bitte Filename eingeben: ");
  41.    Readln(FName);
  42.    FHandle := DosOpen(FName,MODE_OLDFILE);
  43.    IF FHandle=0 THEN BEGIN
  44.       Writeln("Kann ",FName," nicht öffnen.");
  45.       Halt(20);
  46.    END;
  47.  
  48.    {-----------------------------------}
  49.    {- Die folgenden beiden Zeilen er- -}
  50.    {- mitteln die Länge des File      -}
  51.    FileLen:=DosSeek(FHandle,0,OFFSET_END);
  52.    FileLen:=DosSeek(FHandle,0,OFFSET_BEGINNING);
  53.  
  54.    {-----------------------------------}
  55.    {-  Speicher für File allozieren   -}
  56.    {- und Daten in den Speicher laden -}
  57.    FileStart:=ptr(Alloc_Mem(FileLen+64,0));
  58.    Err:=DosRead(FHandle,FileStart,FileLen);
  59.    ok:=DosClose(FHandle);
  60.    IF Err<>FileLen THEN BEGIN
  61.       Writeln("Fehler beim Lesen von ",FName);
  62.       Halt(20);
  63.    END;
  64.  
  65.    {-----------------------------------}
  66.    {-    Hier beginnt das Crunchen    -}
  67.    CrInfo := ppAllocCrunchInfo(CRUN_GOOD,SPEEDUP_BUFFMEDIUM,NIL,NIL);
  68.    IF CrInfo=NIL THEN BEGIN
  69.       Writeln("Nicht genug Speicher");
  70.       Halt(20);
  71.    END;
  72.    Writeln("Packe nun ",FName," mit Modus Medium..."#10);
  73.    Writeln("Größe vor dem Packen : ",FileLen);
  74.    CrLen := ppCrunchBuffer(CrInfo,FileStart,FileLen);
  75.    ppFreeCrunchInfo(CrInfo);
  76.    IF CrLen=PP_BUFFEROVERFLOW THEN BEGIN
  77.       Writeln("Buffer overflow !");
  78.       Halt(20);
  79.    END;
  80.    Writeln("Größe nach dem Packen: ",CrLen);
  81.  
  82.    {-----------------------------------}
  83.    {-   Jetzt werden die gepackten    -}
  84.    {-    Daten zwischengespeichert    -}
  85.    Writeln;Writeln("Speichere das ganze zwischen...");
  86.    FHandle:=DosOpen("ram:temp.pp",MODE_NEWFILE);
  87.    IF FHandle=0 THEN BEGIN
  88.       Writeln("Kann temporäres File nicht öffnen");
  89.       Halt(20);
  90.    END;
  91.    IF NOT ppWriteDataHeader(FHandle,CRUN_GOOD,0,0) THEN BEGIN
  92.       Writeln("Write Error");
  93.       Halt(20);
  94.    END;
  95.    err:=DosWrite(FHandle,FileStart,CrLen);
  96.    ok:=DosClose(FHandle);
  97.    IF err<>CrLen THEN BEGIN
  98.       Writeln("Write Error");
  99.       Halt(20);
  100.    END;
  101.    Free_Mem(Long(FileStart),FileLen+64);
  102.    FileStart:=NIL;
  103.    Writeln("File jetzt zwischengespeichert"#10);
  104.  
  105.    {-----------------------------------}
  106.    {-   nun entpacken wir das Ganze   -}
  107.    {-     wieder mit ppLoadData()     -}
  108.    Writeln("Das entcrunchen geht ganz leicht mit ppLoadData()...");
  109.  
  110.  
  111.    err:=ppLoadData("ram:temp.pp",DECR_POINTER,0,^Start,^Len,NIL);
  112.    IF err<>0 THEN BEGIN
  113.       Writeln(ppErrorMessage(err));
  114.       Halt(20);
  115.    END;
  116.    fhandle:=DosOpen('ram:0',Mode_Newfile);
  117.    IF FHandle=0 THEN
  118.    BEGiN
  119.     writeln('kann File nicht öffnen');
  120.     halt(20);
  121.    END;
  122.    err:=DosWrite(fhandle,start,len);
  123.    err:=dosclose(fhandle);
  124.    Writeln("Alles schon geschehen mit einem Funktions-Aufruf !");
  125.  
  126.    {-----------------------------------}
  127.    {- Speicher muß mit FreeMem wieder -}
  128.    {-       freigegeben werden        -}
  129.    FreeMem(FileStart,FileLen);
  130.    IF FromWB THEN BEGIN
  131.       Writeln("Bitte Return drücken");
  132.       Readln(FName);
  133.       Close(Input);
  134.    END;
  135. END;
  136.  
  137.  
  138.  
  139.  
  140.